<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   淘宝数据库OceanBase SQL编译器源码阅读：生成逻辑计划  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://dataunion.org/19122.html",
                  host: "http://dataunion.org",
                  prePath: "http://dataunion.org",
                  scheme: "http",
                  pathBase: "http://dataunion.org/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466454864: Accept with keywords: (title(0.375):逻辑,数据库,数盟,编译器,源码,计划,淘宝,社区, topn(0.233333333333):原生,社区,定义,基类,数盟,标识,编译器,子句,数据挖掘,表达式,省略,数据库,计划,基础架构,文章,类型,线程,房间,函数,语法,实例,语句,逻辑,常量,行业资讯,列表,字段,内容,淘宝,源码).-->
 </head>
 <body onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    淘宝数据库OceanBase SQL编译器源码阅读：生成逻辑计划
   </h1>
  </div>
  <div class="container" id="xmain">
   ﻿﻿
   <title>
    淘宝数据库OceanBase SQL编译器源码阅读：生成逻辑计划 | 数盟社区
   </title>
   <!-- All in One SEO Pack 2.2.7.6.2 by Michael Torbert of Semper Fi Web Design[32,79] -->
   <!-- /all in one seo pack -->
   <!--
<div align="center">
<a href="http://strata.oreilly.com.cn/hadoop-big-data-cn?cmp=mp-data-confreg-home-stcn16_dataunion_pc" target="_blank"><img src="http://dataunion.org/wp-content/uploads/2016/05/stratabj.jpg"/ ></a>
</div>
-->
   <header id="header-web">
    <div class="header-main">
     <hgroup class="logo">
      <h1>
       <a href="http://dataunion.org/" rel="home" title="数盟社区">
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/logo.png"/>
       </a>
      </h1>
     </hgroup>
     <!--logo-->
     <nav class="header-nav">
      <ul class="menu" id="menu-%e4%b8%bb%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-71" id="menu-item-71">
        <a href="http://dataunion.org/category/events" title="events">
         活动
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22457" id="menu-item-22457">
          <a href="http://dataunion.org/2016timeline">
           2016档期
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22459" id="menu-item-22459">
          <a href="http://dataunion.org/category/parterc">
           合作会议
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor menu-item-has-children menu-item-20869" id="menu-item-20869">
        <a href="http://dataunion.org/category/tech" title="articles">
         文章
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-20867" id="menu-item-20867">
          <a href="http://dataunion.org/category/tech/base" title="base">
           基础架构
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3302" id="menu-item-3302">
          <a href="http://dataunion.org/category/tech/ai" title="ai">
           人工智能
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3303" id="menu-item-3303">
          <a href="http://dataunion.org/category/tech/analysis" title="analysis">
           数据分析
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21920" id="menu-item-21920">
          <a href="http://dataunion.org/category/tech/dm">
           数据挖掘
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3314" id="menu-item-3314">
          <a href="http://dataunion.org/category/tech/viz" title="viz">
           可视化
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3305" id="menu-item-3305">
          <a href="http://dataunion.org/category/tech/devl" title="devl">
           编程语言
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-20876" id="menu-item-20876">
        <a href="http://dataunion.org/category/industry">
         行业
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16328" id="menu-item-16328">
          <a href="http://dataunion.org/category/industry/case" title="case">
           行业应用
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2112" id="menu-item-2112">
          <a href="http://dataunion.org/category/industry/demo" title="demo">
           Demo展示
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21562" id="menu-item-21562">
          <a href="http://dataunion.org/category/industry/news">
           行业资讯
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-311" id="menu-item-311">
        <a href="http://dataunion.org/category/sources" title="sources">
         资源
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20870" id="menu-item-20870">
        <a href="http://dataunion.org/category/books" title="book">
         图书
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21363" id="menu-item-21363">
        <a href="http://dataunion.org/category/training">
         课程
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-21853" id="menu-item-21853">
        <a href="http://dataunion.org/category/jobs">
         职位
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22050" id="menu-item-22050">
          <a href="http://dataunion.org/category/career">
           职业规划
          </a>
         </li>
        </ul>
       </li>
      </ul>
     </nav>
     <!--header-nav-->
    </div>
   </header>
   <!--header-web-->
   <div id="main">
    <div id="soutab">
     <form action="http://dataunion.org/" class="search" method="get">
     </form>
    </div>
    <div id="container">
     <nav id="mbx">
      当前位置：
      <a href="http://dataunion.org">
       首页
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech">
       文章
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech/base">
       基础架构
      </a>
      &gt;  正文
     </nav>
     <!--mbx-->
     <article class="content">
      <header align="centre" class="contenttitle">
       <div class="mscc">
        <h1 class="mscctitle">
         <a href="http://dataunion.org/19122.html">
          淘宝数据库OceanBase SQL编译器源码阅读：生成逻辑计划
         </a>
        </h1>
        <address class="msccaddress ">
         <em>
          1,572 次阅读 -
         </em>
         <a href="http://dataunion.org/category/tech/base" rel="category tag">
          基础架构
         </a>
        </address>
       </div>
      </header>
      <div class="content-text">
       <p>
        SQL编译解析三部曲分为：构建语法树，生成逻辑计划，指定物理执行计划。第一步骤，在我的上一篇博客
        <a href="http://blog.csdn.net/qq910894904/article/details/28658421" target="_blank">
         淘宝数据库OceanBase SQL编译器部分 源码阅读–解析SQL语法树
        </a>
        里做了介绍，这篇博客主要研究第二步，生成逻辑计划。
       </p>
       <h2>
        <p name="t1">
        </p>
        一、 什么是逻辑计划？
       </h2>
       <p>
        我们已经知道，语法树就是一个树状的结构组织，每个节点代表一种类型的语法含义。如
       </p>
       <p>
        <code>
         update student set sex="M" where name ="小明";
        </code>
       </p>
       <p>
        这条SQL的语法树形状为：
       </p>
       <blockquote>
        <p>
         |Update Stmt
        </p>
        <p>
         |—-Table:student
        </p>
        <p>
         |—-TargeList:
        </p>
        <p>
         |——–sex = “M”
        </p>
        <p>
         |—-Qualifications:
        </p>
        <p>
         |——–name=”小明”
        </p>
       </blockquote>
       <p>
        但是仅仅语法树并不能知道数据库中是否存在student这张表，这张表是否有sex,name这两个字段，我们是否有权限修改这条记录等。语法树只能判断这条SQL的写法是否正确，不能确定这条SQL是否可以执行。
        <br/>
        <strong>
         逻辑计划
        </strong>
        需要明确SQL语句中所涉及到的表，字段，表达式等是否有效。这个的逻辑计划与在《数据库系统实现》等书中描述的逻辑查询计划不同。逻辑查询计划将SQL语句直接转为可运算的关系表达式。在OceanBase中，逻辑计划则只是查找或生成涉及到的表的ID，涉及字段的ID，涉及表达式的ID等，逻辑计划是不可运算的。
       </p>
       <h2>
        <p name="t2">
        </p>
        二、逻辑计划包含哪些内容？
       </h2>
       <p>
        简单来说，逻辑计划要弄清楚，这条SQL可以分解为几条stmt,每条stmt包含了哪些表，字段和表达式。在此基础上，如果是insert的Stmt，要加上设置哪些值;如果是update的stmt,要加上需要更新的列和对应的值，等等。
        <br/>
        <strong>
         在一个逻辑计划中，每一个查询有一个唯一标识qid,每一张表有一个唯一的标识tid,每一个列有一个唯一的标识cid,每一个表达式有一个唯一的标识eid
        </strong>
        。
        <br/>
        来看OceanBase中的逻辑计划的结构（省略无关方法和变量).
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e048929191252" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          class ObLogicalPlan
    {
      //...  
      oceanbase::common::ObVector&amp;lt;ObStmt*&amp;gt; stmts_; //存储该逻辑计划的所有stmt
      oceanbase::common::ObVector&amp;lt;ObSqlRawExpr*&amp;gt; exprs_; //逻辑计划的所有表达式
      oceanbase::common::ObVector&amp;lt;ObRawExpr*&amp;gt; raw_exprs_store_;//存储逻辑计划的所有表达式
      uint64_t  new_gen_tid_;//用于生成新的tid
      uint64_t  new_gen_cid_;//用于生成新的cid
      uint64_t  new_gen_qid_;//用于生成新的qid
      uint64_t  new_gen_eid_;//用于生成新的eid
    };
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e048929191252-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e048929191252-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e048929191252-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e048929191252-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e048929191252-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e048929191252-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e048929191252-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e048929191252-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e048929191252-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e048929191252-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e048929191252-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e048929191252-12">
               12
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e048929191252-1">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObLogicalPlan
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e048929191252-2">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e048929191252-3">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //...
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e048929191252-4">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                oceanbase
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                ObVector
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e ">
                ObStmt*
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                stmts_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //存储该逻辑计划的所有stmt
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e048929191252-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                oceanbase
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                ObVector
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e ">
                ObSqlRawExpr*
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                exprs_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //逻辑计划的所有表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e048929191252-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                oceanbase
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                ObVector
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e ">
                ObRawExpr*
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                raw_exprs_store_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-c">
                //存储逻辑计划的所有表达式
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e048929191252-7">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                new_gen_tid_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-c">
                //用于生成新的tid
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e048929191252-8">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                new_gen_cid_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-c">
                //用于生成新的cid
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e048929191252-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                new_gen_qid_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-c">
                //用于生成新的qid
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e048929191252-10">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                new_gen_eid_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-c">
                //用于生成新的eid
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e048929191252-11">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e048929191252-12">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0166 seconds] -->
       <p>
        <code>
         oceanbase::common::ObVector
        </code>
        是OceanBase中自己实现的泛型容器之一，作用与STL的vector相同。
       </p>
       <p>
        <code>
         stmts_
        </code>
        存储该逻辑计划的所有stmt;
       </p>
       <p>
        <strong>
         <code>
          raw_exprs_store_
         </code>
         仅仅用于存储表达式，
         <code>
          exprs_
         </code>
         则引用
         <code>
          raw_exprs_store_
         </code>
         中的内容。
        </strong>
       </p>
       <p>
        <code>
         new_gen_tid_
        </code>
        等4个变量是用来生成新的标识时使用，一个逻辑是可以用多个tid,多个cid,多个eid，多个qid的。这些标识分布于存储的stmt和表达式中。
        <br/>
        <em>
         注：stmt实在不知道中文该怎么称呼，就不改中文名了。
        </em>
       </p>
       <h3>
        <p name="t3">
        </p>
        2.1 逻辑计划中表的定义
       </h3>
       <p>
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e05a112388826" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          struct TableItem
{
    uint64_t    table_id_;
    common::ObString    table_name_;
    common::ObString    alias_name_;
    TableType   type_;

    uint64_t     ref_id_;
};
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e05a112388826-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e05a112388826-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e05a112388826-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e05a112388826-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e05a112388826-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e05a112388826-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e05a112388826-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e05a112388826-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e05a112388826-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e05a112388826-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e05a112388826-11">
               11
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e05a112388826-1">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e05a112388826-2">
               <span class="crayon-t">
                struct
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                TableItem
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e05a112388826-3">
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e05a112388826-4">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                table_id_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e05a112388826-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-e">
                ObString
               </span>
               <span class="crayon-v">
                table_name_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e05a112388826-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-e">
                ObString
               </span>
               <span class="crayon-v">
                alias_name_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e05a112388826-7">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                TableType
               </span>
               <span class="crayon-v">
                type_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e05a112388826-8">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e05a112388826-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                ref_id_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e05a112388826-10">
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e05a112388826-11">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0248 seconds] -->
       <p>
        <code>
         table_id_
        </code>
        唯一标识一个关系表，其类型分为基本表，引用表和子查询关系。
       </p>
       <p>
        对同一个实体表,
        <code>
         ref_id_
        </code>
        与
        <code>
         table_id_
        </code>
        相同;
        <br/>
        如果是一个引用别名的表，则
        <code>
         table_id_
        </code>
        是新生成的，
        <code>
         ref_id_
        </code>
        与这个表真正的
        <code>
         table_id_
        </code>
        相同;如果是一个子查询，则
        <code>
         table_id_
        </code>
        是新生成的,
        <code>
         ref_id_
        </code>
        是对子查询的引用。
        <br/>
        对同一个实体表，它在所有线程使用的
        <code>
         table_id_
        </code>
        都是相同的；如果是生成的标识，则仅在该线程会话期间是唯一的。
       </p>
       <h3>
        <p name="t4">
        </p>
        2.2 逻辑计划中列的定义
       </h3>
       <p>
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e061858559907" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          struct ColumnItem
{
    uint64_t    column_id_;
    common::ObString    column_name_;
    uint64_t    table_id_;
    uint64_t    query_id_;

    bool        is_name_unique_;
    bool        is_group_based_;

    common::ObObjType     data_type_;
};
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e061858559907-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e061858559907-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e061858559907-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e061858559907-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e061858559907-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e061858559907-12">
               12
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e061858559907-13">
               13
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e061858559907-1">
               <span class="crayon-t">
                struct
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ColumnItem
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e061858559907-2">
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e061858559907-3">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                column_id_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e061858559907-4">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-e">
                ObString
               </span>
               <span class="crayon-v">
                column_name_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e061858559907-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                table_id_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e061858559907-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                query_id_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e061858559907-7">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e061858559907-8">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                bool
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                is_name_unique_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e061858559907-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                bool
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                is_group_based_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e061858559907-10">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e061858559907-11">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-e">
                ObObjType
               </span>
               <span class="crayon-v">
                data_type_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e061858559907-12">
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e061858559907-13">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0142 seconds] -->
       <p>
        <code>
         column_id_
        </code>
        唯一标识一个列，
        <code>
         table_id_
        </code>
        和
        <code>
         query_id_
        </code>
        为该列所属的关系表和stmt。
        <code>
         is_name_unique_
        </code>
        仅用在解析逻辑计划期间，标记该列的名称是否在所有表的字段中都是唯一的。
        <code>
         is_group_based_
        </code>
        标记该列是否用于分组。
        <code>
         data_type_
        </code>
        标识该列的数据类型。
       </p>
       <h3>
        <p name="t5">
        </p>
        2.3 逻辑计划中的表达式的定义
       </h3>
       <p>
        逻辑计划的中表达式有多种类型，其基类为ObRawExpr.包括两个成员变量，
        <code>
         type_
        </code>
        表示表达式的类型，
        <code>
         result_type_
        </code>
        表示表达式值的类型。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e069617511481" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          class ObRawExpr
 {
 //省略其他方法
 private:
    ObItemType  type_;
    common::ObObjType result_type_;
 }
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e069617511481-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e069617511481-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e069617511481-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e069617511481-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e069617511481-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e069617511481-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e069617511481-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e069617511481-8">
               8
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e069617511481-1">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e069617511481-2">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e069617511481-3">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //省略其他方法
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e069617511481-4">
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                private
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e069617511481-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObItemType
               </span>
               <span class="crayon-v">
                type_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e069617511481-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-e">
                ObObjType
               </span>
               <span class="crayon-v">
                result_type_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e069617511481-7">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e069617511481-8">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0014 seconds] -->
       <p>
        表达式分为常量表达式, 一元引用表达式，二元引用表达式，一元操作符表达式，二元操作符表达式，三元操作符表达式，多元操作符表达式，case操作符表达式，聚集函数表达式，系统函数表达式，SQL原生表达式等。继承关系如下。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e070314021728" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          namespace sql
{
     //原生表达式基类
    class ObRawExpr
    //常量表达式
    class ObConstRawExpr        : public ObRawExpr
    //一元引用表达式
    class ObUnaryRefRawExpr     : public ObRawExpr
    //二元引用表达式
    class ObBinaryRefRawExpr    : public ObRawExpr
    //一元操作符表达式
    class ObUnaryOpRawExpr      : public ObRawExpr
    //二元操作符表达式
    class ObBinaryOpRawExpr     : public ObRawExpr
     //三元操作符表达式
    class ObTripleOpRawExpr     : public ObRawExpr
    //多元操作符表达式
    class ObMultiOpRawExpr      : public ObRawExpr
    //case操作符表达式
    class ObCaseOpRawExpr       : public ObRawExpr
    //聚集函数表达式
    class ObAggFunRawExpr       : public ObRawExpr
    //系统函数表达式
    class ObSysFunRawExpr       : public ObRawExpr
    //SQL原生表达式
    class ObSqlRawExpr          : public ObRawExpr
 };

 class ObRawExpr
 {

 };
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-12">
               12
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-13">
               13
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-14">
               14
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-15">
               15
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-16">
               16
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-17">
               17
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-18">
               18
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-19">
               19
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-20">
               20
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-21">
               21
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-22">
               22
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-23">
               23
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-24">
               24
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-25">
               25
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-26">
               26
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-27">
               27
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-28">
               28
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-29">
               29
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-30">
               30
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-31">
               31
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e070314021728-32">
               32
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e070314021728-33">
               33
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e070314021728-1">
               <span class="crayon-t">
                namespace
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                sql
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-2">
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-3">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //原生表达式基类
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-4">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //常量表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObConstRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-7">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //一元引用表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-8">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObUnaryRefRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //二元引用表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-10">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObBinaryRefRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-11">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //一元操作符表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-12">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObUnaryOpRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-13">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //二元操作符表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-14">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObBinaryOpRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-15">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //三元操作符表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-16">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObTripleOpRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-17">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //多元操作符表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-18">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObMultiOpRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-19">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //case操作符表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-20">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObCaseOpRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-21">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //聚集函数表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-22">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObAggFunRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-23">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //系统函数表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-24">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObSysFunRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-25">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //SQL原生表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-26">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ObSqlRawExpr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                public
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-i">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-27">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-28">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-29">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObRawExpr
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-30">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-31">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e070314021728-32">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e070314021728-33">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0214 seconds] -->
       <p>
        在ObLogicalPlan中，存储使用的是
        <code>
         vector&lt;ObRawExpr *&gt;
        </code>
        ,使用时转为
        <code>
         vector&lt;ObSqlRawExpr *&gt;
        </code>
        .
       </p>
       <h3>
        <p name="t6">
        </p>
        2.4 逻辑计划中的Stmt的定义
       </h3>
       <p>
        Stmt表示一个单独的查询所包含的内容，一个逻辑计划可以包含多个Stmt.
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e077920475426" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          class &lt;em&gt;ObStmt&lt;/em&gt;
    {
    /*省略部分内容...*/
    protected:
      common::ObVector&amp;lt;TableItem&amp;gt;    table_items_;
      common::ObVector&amp;lt;ColumnItem&amp;gt;   column_items_;

    private:
      StmtType  type_;
      uint64_t  query_id_;
      //uint64_t  where_expr_id_;
      common::ObVector&amp;lt;uint64_t&amp;gt;     where_expr_ids_;

    };
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-12">
               12
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-13">
               13
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e077920475426-14">
               14
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e077920475426-15">
               15
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e077920475426-1">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                class
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                &lt;
               </span>
               <span class="crayon-e">
                em
               </span>
               <span class="crayon-o">
                &gt;
               </span>
               <span class="crayon-e">
                ObStmt
               </span>
               <span class="crayon-o">
                &lt;
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-e">
                em
               </span>
               <span class="crayon-o">
                &gt;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-2">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-3">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                /*省略部分内容...*/
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-4">
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                protected
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                ObVector
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                TableItem
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                table_items_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                ObVector
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                ColumnItem
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                column_items_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-7">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-8">
               <span class="crayon-h">
               </span>
               <span class="crayon-m">
                private
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                StmtType
               </span>
               <span class="crayon-v">
                type_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-10">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                query_id_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-11">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //uint64_t  where_expr_id_;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-12">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                common
               </span>
               <span class="crayon-o">
                ::
               </span>
               <span class="crayon-v">
                ObVector
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                uint64_t
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                where_expr_ids_
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-13">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e077920475426-14">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e077920475426-15">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0105 seconds] -->
       <p>
        Stmt包括了一个查询所有的表
        <code>
         table_items_
        </code>
        ,列
        <code>
         column_items_
        </code>
        ,表达式
        <code>
         where_expr_ids_
        </code>
        和一个唯一的查询标识
        <code>
         query_id_
        </code>
        。注意这里存储的只有表达式的id,而不是表达式的实际内容。
        <br/>
        从上述的定义总结来看，一个逻辑计划拥有多条查询实例Stmt和多个表达式，一个查询实例Stmt包含了多个表和多个列及所需表达式的引用。表，列，表达式，查询实例都有唯一的标识符进行标记。
       </p>
       <blockquote>
        <p>
         <strong>
          ObLogicalPlan
         </strong>
        </p>
        <p>
         —-
         <strong>
          ObStmt
         </strong>
         : 1…n
        </p>
        <p>
         ——–
         <strong>
          TableItem
         </strong>
         : 0…n
        </p>
        <p>
         ——–
         <strong>
          ColnumItem
         </strong>
         : 0…n
        </p>
        <p>
         ——–
         <strong>
          expr_id_ref
         </strong>
         : 0…n
        </p>
        <p>
         —-
         <strong>
          ObRawExpr
         </strong>
         : 0…n
        </p>
       </blockquote>
       <h2>
        <p name="t7">
        </p>
        三、 如何制定逻辑计划？
       </h2>
       <h3>
        <p name="t8">
        </p>
        3.1 reslove系列解析函数
       </h3>
       <p>
        制定逻辑计划的源码在build_plan.h和build_plan.cpp中，在OceanBase0.4中，则增加了dml_build_plan.h和dml_build_plan.cpp。制定逻辑对外提供的接口只有两个,解析函数
        <code>
         resolove
        </code>
        和销毁函数
        <code>
         destroy_plan
        </code>
        ,其他的为自用，可以浏览下其函数声明及用途，基本的结构就是这样，因为目前OceanBase中支持的SQL语句不多，相应的解析函数也比较少，还有一些没有完成，可以想见未来还会添加更多的函数。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e07e017966789" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          //解析多重查询
int resolve_multi_stmt(ResultPlan* result_plan, ParseNode* node)
//解析独立表达式
int resolve_independ_expr()
//解析and表达式
int resolve_and_exprs()
//解析表达式
int resolve_expr()
//解析聚集函数
int resolve_agg_func()
//解析join表连接
int resolve_joined_table()
//解析表
int resolve_table()
//解析from子句
int resolve_from_clause()
//解析列
int resolve_table_columns()
//解析*
int resolve_star()
//解析select的投影列表
int resolve_select_clause()
//解析where子句
int resolve_where_clause()
//解析group by子句
int resolve_group_clause()
//解析having子句
int resolve_having_clause()
//解析order子句
int resolve_order_clause()
//解析limit子句
int resolve_limit_clause()
//解析select查询
int resolve_select_stmt()
//解析delete查询
int resolve_delete_stmt()
//解析insert的插入列
int resolve_insert_columns()
//解析intsert查询的插入值
int resolve_insert_values()
//解析insert查询
int resolve_insert_stmt()
//解析update查询
int resolve_update_stmt()
//解析函数。对外提供
int resolve(ResultPlan* result_plan, ParseNode* node)
//销毁函数，对外提供
extern void destroy_plan(ResultPlan* result_plan)
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-12">
               12
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-13">
               13
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-14">
               14
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-15">
               15
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-16">
               16
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-17">
               17
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-18">
               18
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-19">
               19
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-20">
               20
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-21">
               21
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-22">
               22
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-23">
               23
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-24">
               24
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-25">
               25
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-26">
               26
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-27">
               27
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-28">
               28
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-29">
               29
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-30">
               30
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-31">
               31
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-32">
               32
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-33">
               33
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-34">
               34
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-35">
               35
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-36">
               36
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-37">
               37
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-38">
               38
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-39">
               39
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-40">
               40
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-41">
               41
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-42">
               42
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-43">
               43
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-44">
               44
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-45">
               45
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-46">
               46
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-47">
               47
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e07e017966789-48">
               48
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e07e017966789-49">
               49
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-1">
               <span class="crayon-c">
                //解析多重查询
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-2">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_multi_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e ">
                ResultPlan*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-3">
               <span class="crayon-c">
                //解析独立表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-4">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_independ_expr
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-5">
               <span class="crayon-c">
                //解析and表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-6">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_and_exprs
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-7">
               <span class="crayon-c">
                //解析表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-8">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_expr
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-9">
               <span class="crayon-c">
                //解析聚集函数
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-10">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_agg_func
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-11">
               <span class="crayon-c">
                //解析join表连接
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-12">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_joined_table
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-13">
               <span class="crayon-c">
                //解析表
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-14">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_table
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-15">
               <span class="crayon-c">
                //解析from子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-16">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_from_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-17">
               <span class="crayon-c">
                //解析列
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-18">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_table_columns
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-19">
               <span class="crayon-c">
                //解析*
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-20">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_star
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-21">
               <span class="crayon-c">
                //解析select的投影列表
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-22">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_select_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-23">
               <span class="crayon-c">
                //解析where子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-24">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_where_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-25">
               <span class="crayon-c">
                //解析group by子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-26">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_group_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-27">
               <span class="crayon-c">
                //解析having子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-28">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_having_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-29">
               <span class="crayon-c">
                //解析order子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-30">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_order_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-31">
               <span class="crayon-c">
                //解析limit子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-32">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_limit_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-33">
               <span class="crayon-c">
                //解析select查询
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-34">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_select_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-35">
               <span class="crayon-c">
                //解析delete查询
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-36">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_delete_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-37">
               <span class="crayon-c">
                //解析insert的插入列
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-38">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_insert_columns
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-39">
               <span class="crayon-c">
                //解析intsert查询的插入值
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-40">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_insert_values
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-41">
               <span class="crayon-c">
                //解析insert查询
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-42">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_insert_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-43">
               <span class="crayon-c">
                //解析update查询
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-44">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_update_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-45">
               <span class="crayon-c">
                //解析函数。对外提供
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-46">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e ">
                ResultPlan*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-47">
               <span class="crayon-c">
                //销毁函数，对外提供
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e07e017966789-48">
               <span class="crayon-e">
                extern
               </span>
               <span class="crayon-t">
                void
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                destroy_plan
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e ">
                ResultPlan*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e07e017966789-49">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0307 seconds] -->
       <p>
        resolve函数根据语法树node的类型调用不同的查询解析实例。以下是部分代码摘抄：
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768534d4e085574438970" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          int resolve(ResultPlan* result_plan, ParseNode* node)
{
   /*...*/

  uint64_t query_id = OB_INVALID_ID;
  if (ret == OB_SUCCESS &amp;amp;&amp;amp; node != NULL)
  {
    switch (node-&amp;gt;type_)
    {
      case T_STMT_LIST:
      {
        ret = resolve_multi_stmt(result_plan, node);
        break;
      }
      case T_SELECT:
      {
        ret = resolve_select_stmt(result_plan, node, query_id);
        break;
      }
      case T_DELETE:
      {
        ret = resolve_delete_stmt(result_plan, node, query_id);
        break;
      }
      case T_INSERT:
      {
        ret = resolve_insert_stmt(result_plan, node, query_id);
        break;
      }
      case T_UPDATE:
      {
        ret = resolve_update_stmt(result_plan, node, query_id);
        break;
      }
      default:
        ret = OB_ERROR;
        break;
    };
  }
  return ret;
}
int resolve_update_stmt(ResultPlan* result_plan, ParseNode* node, uint64_t&amp;amp; query_id)
{
  int&amp;amp; ret = result_plan-&amp;gt;err_stat_.err_code_ = OB_SUCCESS;
  uint64_t table_id = OB_INVALID_ID;

  query_id = OB_INVALID_ID;

  ObLogicalPlan* logical_plan  logical_plan = new(logical_plan) ObLogicalPlan(name_pool);

  result_plan-&amp;gt;plan_tree_ = logical_plan;


  update_stmt = new(update_stmt) ObUpdateStmt(name_pool);

  query_id = logical_plan-&amp;gt;generate_query_id();
  //为update_stmt设置新的标识qid
  update_stmt-&amp;gt;set_query_id(query_id);

  logical_plan-&amp;gt;add_query(update_stmt);

  ParseNode* table_node = node-&amp;gt;children_[0];
  //解析表  
  ret = resolve_table(result_plan, update_stmt, table_node, table_id);

  update_stmt-&amp;gt;set_update_table(table_id);

  ParseNode* assign_list = node-&amp;gt;children_[1];

  uint64_t ref_id;
  ColumnItem *column_item = NULL;
  //解析要更新的列表，如:update student set sex="M",grade="2" where name = "xiaoming";
  for (int32_t i = 0; ret == OB_SUCCESS &amp;amp;&amp;amp; i &amp;lt; assign_list-&amp;gt;num_child_; i++)
  {
      ParseNode* assgin_node = assign_list-&amp;gt;children_[i];

      /* resolve target column */
      ParseNode* column_node = assgin_node-&amp;gt;children_[0];

      ObString column_name;
            column_name.assign_ptr(
                (char*)(column_node-&amp;gt;str_value_), 
                static_cast&amp;lt;int32_t&amp;gt;(strlen(column_node-&amp;gt;str_value_))
                );
      //1 根据列名获取列
      column_item = update_stmt-&amp;gt;get_column_item(NULL, column_name);
      //2 解析列到vector&amp;lt;ColumnItem *&amp;gt;
      ret = update_stmt-&amp;gt;add_column_item(*result_plan, column_name, NULL, &amp;amp;column_item);
      //3 增加列引用到update_stmt  
      ret = update_stmt-&amp;gt;add_update_column(column_item-&amp;gt;column_id_);

            /* resolve new value expression */
      //4 解析值表达式
      ParseNode* expr = assgin_node-&amp;gt;children_[1];
      ret = resolve_independ_expr(result_plan, update_stmt, expr, ref_id, T_UPDATE_LIMIT);
      //5 添加值表达式引用到update_stmt
      ret = update_stmt-&amp;gt;add_update_expr(ref_id)
  }
  //解析where子句
  ret = resolve_where_clause(result_plan, update_stmt, node-&amp;gt;children_[2]);

  return ret;
}
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-12">
               12
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-13">
               13
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-14">
               14
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-15">
               15
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-16">
               16
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-17">
               17
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-18">
               18
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-19">
               19
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-20">
               20
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-21">
               21
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-22">
               22
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-23">
               23
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-24">
               24
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-25">
               25
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-26">
               26
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-27">
               27
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-28">
               28
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-29">
               29
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-30">
               30
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-31">
               31
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-32">
               32
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-33">
               33
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-34">
               34
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-35">
               35
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-36">
               36
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-37">
               37
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-38">
               38
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-39">
               39
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-40">
               40
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-41">
               41
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-42">
               42
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-43">
               43
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-44">
               44
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-45">
               45
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-46">
               46
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-47">
               47
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-48">
               48
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-49">
               49
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-50">
               50
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-51">
               51
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-52">
               52
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-53">
               53
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-54">
               54
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-55">
               55
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-56">
               56
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-57">
               57
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-58">
               58
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-59">
               59
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-60">
               60
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-61">
               61
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-62">
               62
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-63">
               63
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-64">
               64
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-65">
               65
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-66">
               66
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-67">
               67
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-68">
               68
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-69">
               69
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-70">
               70
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-71">
               71
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-72">
               72
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-73">
               73
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-74">
               74
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-75">
               75
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-76">
               76
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-77">
               77
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-78">
               78
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-79">
               79
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-80">
               80
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-81">
               81
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-82">
               82
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-83">
               83
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-84">
               84
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-85">
               85
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-86">
               86
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-87">
               87
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-88">
               88
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-89">
               89
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-90">
               90
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-91">
               91
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-92">
               92
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-93">
               93
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-94">
               94
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-95">
               95
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-96">
               96
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-97">
               97
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-98">
               98
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-99">
               99
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-100">
               100
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-101">
               101
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-102">
               102
              </div>
              <div class="crayon-num" data-line="crayon-5768534d4e085574438970-103">
               103
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-5768534d4e085574438970-104">
               104
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-5768534d4e085574438970-1">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e ">
                ResultPlan*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-2">
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-3">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                /*...*/
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-4">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_INVALID_ID
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                if
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                ==
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_SUCCESS
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                !=
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                NULL
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-7">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-8">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                switch
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                type_
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-10">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                case
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                T_STMT_LIST
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-11">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-12">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_multi_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-13">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                break
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-14">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-15">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                case
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                T_SELECT
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-16">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-17">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_select_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-18">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                break
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-19">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-20">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                case
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                T_DELETE
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-21">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-22">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_delete_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-23">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                break
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-24">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-25">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                case
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                T_INSERT
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-26">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-27">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_insert_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-28">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                break
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-29">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-30">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                case
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                T_UPDATE
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-31">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-32">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_update_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-33">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                break
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-34">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-35">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                default
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-36">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_ERROR
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-37">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                break
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-38">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-39">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-40">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                return
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-41">
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-42">
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_update_stmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e ">
                ResultPlan*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                uint64_t
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-43">
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-44">
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                int
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                err_stat_
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                err_code_
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_SUCCESS
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-45">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                table_id
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_INVALID_ID
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-46">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-47">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_INVALID_ID
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-48">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-49">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ObLogicalPlan*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                logical_plan
               </span>
               <span class="crayon-v">
                logical_plan
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-r">
                new
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                logical_plan
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObLogicalPlan
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                name_pool
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-50">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-51">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                plan_tree_
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                logical_plan
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-52">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-53">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-54">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-r">
                new
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObUpdateStmt
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                name_pool
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-55">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-56">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                logical_plan
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                generate_query_id
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-57">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //为update_stmt设置新的标识qid
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-58">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                set_query_id
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                query_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-59">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-60">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                logical_plan
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                add_query
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-61">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-62">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                table_node
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                children_
               </span>
               <span class="crayon-sy">
                [
               </span>
               <span class="crayon-cn">
                0
               </span>
               <span class="crayon-sy">
                ]
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-63">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //解析表
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-64">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_table
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                table_node
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                table_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-65">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-66">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                set_update_table
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                table_id
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-67">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-68">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                assign_list
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                children_
               </span>
               <span class="crayon-sy">
                [
               </span>
               <span class="crayon-cn">
                1
               </span>
               <span class="crayon-sy">
                ]
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-69">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-70">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                uint64_t
               </span>
               <span class="crayon-v">
                ref_id
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-71">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ColumnItem *
               </span>
               <span class="crayon-v">
                column_item
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                NULL
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-72">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //解析要更新的列表，如:update student set sex="M",grade="2" where name = "xiaoming";
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-73">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                for
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                int32
               </span>
               <span class="crayon-sy">
                _
               </span>
               t
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                i
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                0
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                ==
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                OB_SUCCESS
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                i
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                assign_list
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                num_child_
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                i
               </span>
               <span class="crayon-o">
                ++
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-74">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                {
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-75">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                assgin_node
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                assign_list
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                children_
               </span>
               <span class="crayon-sy">
                [
               </span>
               <span class="crayon-v">
                i
               </span>
               <span class="crayon-sy">
                ]
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-76">
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-77">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                /* resolve target column */
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-78">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                column_node
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                assgin_node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                children_
               </span>
               <span class="crayon-sy">
                [
               </span>
               <span class="crayon-cn">
                0
               </span>
               <span class="crayon-sy">
                ]
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-79">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-80">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ObString
               </span>
               <span class="crayon-v">
                column_name
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-81">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                column_name
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                assign_ptr
               </span>
               <span class="crayon-sy">
                (
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-82">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-t">
                char
               </span>
               <span class="crayon-o">
                *
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                column_node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                str_value_
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-83">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                static_cast
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                lt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                int32_t
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e">
                strlen
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                column_node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                str_value_
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-84">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-85">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //1 根据列名获取列
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-86">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                column_item
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                get_column_item
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-t">
                NULL
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                column_name
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-87">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //2 解析列到vector&amp;lt;ColumnItem *&amp;gt;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-88">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                add_column_item
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-o">
                *
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                column_name
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-t">
                NULL
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                amp
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                column_item
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-89">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //3 增加列引用到update_stmt
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-90">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                add_update_column
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                column_item
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                column_id_
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-91">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-92">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                /* resolve new value expression */
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-93">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //4 解析值表达式
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-94">
               <span class="crayon-h">
               </span>
               <span class="crayon-e ">
                ParseNode*
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                expr
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                assgin_node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                children_
               </span>
               <span class="crayon-sy">
                [
               </span>
               <span class="crayon-cn">
                1
               </span>
               <span class="crayon-sy">
                ]
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-95">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_independ_expr
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                expr
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ref_id
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                T_UPDATE_LIMIT
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-96">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //5 添加值表达式引用到update_stmt
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-97">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-e">
                add_update_expr
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                ref_id
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-98">
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-99">
               <span class="crayon-h">
               </span>
               <span class="crayon-c">
                //解析where子句
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-100">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                resolve_where_clause
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                result_plan
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                update_stmt
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                node
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-o">
                &amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-v">
                children_
               </span>
               <span class="crayon-sy">
                [
               </span>
               <span class="crayon-cn">
                2
               </span>
               <span class="crayon-sy">
                ]
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-101">
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-102">
               <span class="crayon-h">
               </span>
               <span class="crayon-st">
                return
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                ret
               </span>
               <span class="crayon-sy">
                ;
               </span>
              </div>
              <div class="crayon-line" id="crayon-5768534d4e085574438970-103">
               <span class="crayon-sy">
                }
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-5768534d4e085574438970-104">
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0826 seconds] -->
       <p>
        我们仍旧以update语句为例。上面是根据源代码整理的逻辑，不是源码，主要是为了理清思路。
       </p>
       <ol>
        <li>
         首先是创建一个新的查询update_stmt，并为其生成一个独立的查询标识qid
        </li>
        <li>
         解析语句中的表，并将表的标识tid添加到update_stmt的引用列表
        </li>
        <li>
         利用for循环逐个解析要更新的列-值对：
         <br/>
         (1). 根据列名获取列;
         <br/>
         (2). 将该列存储到
         <code>
          update_stmt
         </code>
         的
         <code>
          vector&lt;ColumnItem *&gt;
         </code>
         中,并将列引用id添加到
         <code>
          update_stmt
         </code>
         的更新列列表
         <code>
          ObArray&lt;uint64_t&gt; update_columns_
         </code>
         中;
         <br/>
         (3). 解析值表达式;
         <br/>
         (4). 将值表达式引用id添加到更新值列表
         <code>
          ObArray&lt;uint64_t&gt; update_exprs_
         </code>
         中去;
        </li>
        <li>
         解析where子句.
        </li>
       </ol>
       <h3>
        <p name="t9">
        </p>
        3.2 如何解析表和列？
       </h3>
       <p>
        通过上面我们知道，逻辑计划的解析的一个重要内容就是要确定查询stmt,表，列，表达式的标识.查询和表达式的标识id都可以在解析的时候生成。因为这两项不是线程共有的，但是表和列是持久的数据，可以跨线程使用同样的id。这些表和列的信息由谁来管理？
       </p>
       <h4>
        <p name="t10">
        </p>
        3.2.1 使用Schema
       </h4>
       <p>
        追根溯源，你会发现实体表和列的id是在
        <code>
         ob_schema.cpp
        </code>
        中获取的。什么是schema？
        <strong>
         schema就是数据库对象的一个集合
        </strong>
        。网上有一个很形象的
        <a href="http://blog.csdn.net/jackyren007/article/details/4855049" target="_blank">
         比喻
        </a>
        ,我稍微做了点改动：
       </p>
       <blockquote>
        <p>
         什么是Database，什么是Schema，什么是Table，什么是列，什么是行，什么是User？我们可以可以把Database看作是一个大仓库，仓库分了很多很多的房间，Schema就是其中的房间，一个Schema代表一个房间，Table可以看作是每个Schema中的柜子，行和列就是柜子中的格子。User就是房间的主人。
        </p>
       </blockquote>
       <p>
        OceanBase要求schema强类型约束，也就是要预先定义好schema。这样可以方便的进行各种online ddl操作。
        <br/>
        OceanBase的表和列信息存储在Schema的一个hash_map中。关于Schema 以后再深入了解。
       </p>
       <h2>
        <p name="t11">
        </p>
        四、总结
       </h2>
       <p>
        制定逻辑计划，最关键的是要理解逻辑计划的设计目标，其中最主要的内容就是确定逻辑计划中使用到的查询Stmt,表，列，表达式，并为它们生成或设置唯一标识，确保在同一个逻辑计划中是不相同的。制定逻辑计划的函数只要是reslove系列函数。而表和列的信息存储在Schema中一个hash_map中。
       </p>
       <p>
        原文地址:http://blog.csdn.net/zhujunxxxxx/article/details/38687335
       </p>
       <p>
        原文作者：小竹zz
       </p>
      </div>
      <div>
       <strong>
        注：转载文章均来自于公开网络，仅供学习使用，不会用于任何商业用途，如果侵犯到原作者的权益，请您与我们联系删除或者授权事宜，联系邮箱：contact@dataunion.org。转载数盟网站文章请注明原文章作者，否则产生的任何版权纠纷与数盟无关。
       </strong>
      </div>
      <!--content_text-->
      <div class="fenxian">
       <!-- JiaThis Button BEGIN -->
       <div class="jiathis_style_32x32">
        <p class="jiathis_button_weixin">
        </p>
        <p class="jiathis_button_tsina">
        </p>
        <p class="jiathis_button_qzone">
        </p>
        <p class="jiathis_button_cqq">
        </p>
        <p class="jiathis_button_tumblr">
        </p>
        <a class="jiathis jiathis_txt jtico jtico_jiathis" href="http://www.jiathis.com/share" target="_blank">
        </a>
        <p class="jiathis_counter_style">
        </p>
       </div>
       <!-- JiaThis Button END -->
      </div>
     </article>
     <!--content-->
     <!--相关文章-->
     <div class="xianguan">
      <div class="xianguantitle">
       相关文章！
      </div>
      <ul class="pic">
       <li>
        <a href="http://dataunion.org/20824.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/09/t018630756a7e263b33-300x165.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20824.html" rel="bookmark" title="如何判断一笔交易是否属于欺诈？你只是需要一点数据挖掘">
         如何判断一笔交易是否属于欺诈？你只是需要一点数据挖掘
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/20820.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/09/1-300x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20820.html" rel="bookmark" title="人们对Python在企业级开发中的10大误解">
         人们对Python在企业级开发中的10大误解
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/20811.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/09/t0133fcacae8523307b_副本-300x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20811.html" rel="bookmark" title="大神亲传：26条深度学习的金科玉律！">
         大神亲传：26条深度学习的金科玉律！
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/20808.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/09/640.webp-11-300x137.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20808.html" rel="bookmark" title="我们是如何在一张地图上表现86万个数据的">
         我们是如何在一张地图上表现86万个数据的
        </a>
       </li>
      </ul>
     </div>
     <!--相关文章-->
     <div class="comment" id="comments">
      <!-- You can start editing here. -->
      <!-- If comments are open, but there are no comments. -->
      <div class="title">
       期待你一针见血的评论，Come on！
      </div>
      <div id="respond">
       <p>
        不用想啦，马上
        <a href="http://dataunion.org/wp-login.php?redirect_to=http%3A%2F%2Fdataunion.org%2F19122.html">
         "登录"
        </a>
        发表自已的想法.
       </p>
      </div>
     </div>
     <!-- .nav-single -->
    </div>
    <!--Container End-->
    <aside id="sitebar">
     <div class="sitebar_list2">
      <div class="wptag">
       <span class="tagtitle">
        热门标签+
       </span>
       <div class="tagg">
        <ul class="menu" id="menu-%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1605" id="menu-item-1605">
          <a href="http://taidizh.com/">
           泰迪智慧
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20884" id="menu-item-20884">
          <a href="http://www.transwarp.cn/">
           星环科技
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3538" id="menu-item-3538">
          <a href="http://datall.org/">
           珈和遥感
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20888" id="menu-item-20888">
          <a href="http://www.chinahadoop.cn/">
           小象学院
          </a>
         </li>
        </ul>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <div class="textwidget">
       <div align="center">
        <a href="http://study.163.com/course/courseMain.htm?courseId=991022" target="_blank">
         <img src="http://dataunion.org/wp-content/uploads/2016/03/dv.jpg"/>
        </a>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       文章分类
      </h4>
      <div class="tagcloud">
       <a class="tag-link-44" href="http://dataunion.org/category/industry/demo" style="font-size: 10.204724409449pt;" title="4个话题">
        Demo展示
       </a>
       <a class="tag-link-31" href="http://dataunion.org/category/experts" style="font-size: 15.826771653543pt;" title="52个话题">
        专家团队
       </a>
       <a class="tag-link-870" href="http://dataunion.org/category/tech/ai" style="font-size: 19.795275590551pt;" title="273个话题">
        人工智能
       </a>
       <a class="tag-link-488" href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f" style="font-size: 8pt;" title="1个话题">
        加入数盟
       </a>
       <a class="tag-link-869" href="http://dataunion.org/category/tech/viz" style="font-size: 17.204724409449pt;" title="93个话题">
        可视化
       </a>
       <a class="tag-link-30" href="http://dataunion.org/category/partners" style="font-size: 10.645669291339pt;" title="5个话题">
        合作伙伴
       </a>
       <a class="tag-link-889" href="http://dataunion.org/category/parterc" style="font-size: 11.582677165354pt;" title="8个话题">
        合作会议
       </a>
       <a class="tag-link-104" href="http://dataunion.org/category/books" style="font-size: 12.96062992126pt;" title="15个话题">
        图书
       </a>
       <a class="tag-link-220" href="http://dataunion.org/category/tech/base" style="font-size: 19.850393700787pt;" title="281个话题">
        基础架构
       </a>
       <a class="tag-link-219" href="http://dataunion.org/category/tech/analysis" style="font-size: 19.409448818898pt;" title="232个话题">
        数据分析
       </a>
       <a class="tag-link-887" href="http://dataunion.org/category/tech/dm" style="font-size: 13.291338582677pt;" title="17个话题">
        数据挖掘
       </a>
       <a class="tag-link-34" href="http://dataunion.org/category/tech" style="font-size: 20.732283464567pt;" title="404个话题">
        文章
       </a>
       <a class="tag-link-1" href="http://dataunion.org/category/uncategorized" style="font-size: 22pt;" title="693个话题">
        未分类
       </a>
       <a class="tag-link-4" href="http://dataunion.org/category/events" style="font-size: 14.503937007874pt;" title="29个话题">
        活动
       </a>
       <a class="tag-link-890" href="http://dataunion.org/category/tech/%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0" style="font-size: 10.204724409449pt;" title="4个话题">
        深度学习
       </a>
       <a class="tag-link-221" href="http://dataunion.org/category/tech/devl" style="font-size: 18.968503937008pt;" title="193个话题">
        编程语言
       </a>
       <a class="tag-link-888" href="http://dataunion.org/category/career" style="font-size: 15.661417322835pt;" title="48个话题">
        职业规划
       </a>
       <a class="tag-link-5" href="http://dataunion.org/category/jobs" style="font-size: 14.11811023622pt;" title="25个话题">
        职位
       </a>
       <a class="tag-link-871" href="http://dataunion.org/category/industry" style="font-size: 15.716535433071pt;" title="49个话题">
        行业
       </a>
       <a class="tag-link-613" href="http://dataunion.org/category/industry/case" style="font-size: 16.984251968504pt;" title="84个话题">
        行业应用
       </a>
       <a class="tag-link-885" href="http://dataunion.org/category/industry/news" style="font-size: 17.425196850394pt;" title="102个话题">
        行业资讯
       </a>
       <a class="tag-link-10" href="http://dataunion.org/category/training" style="font-size: 14.228346456693pt;" title="26个话题">
        课程
       </a>
       <a class="tag-link-16" href="http://dataunion.org/category/sources" style="font-size: 15.661417322835pt;" title="48个话题">
        资源
       </a>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       功能
      </h4>
      <ul>
       <li>
        <a href="http://dataunion.org/wp-login.php?action=register">
         注册
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/wp-login.php">
         登录
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/feed">
         文章
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/comments/feed">
         评论
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="https://cn.wordpress.org/" title="基于WordPress，一个优美、先进的个人信息发布平台。">
         WordPress.org
        </a>
       </li>
      </ul>
     </div>
    </aside>
    <div class="clear">
    </div>
   </div>
   <!--main-->
   ﻿
   <footer id="dibu">
    <div class="about">
     <div class="right">
      <ul class="menu" id="menu-%e5%ba%95%e9%83%a8%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-18024" id="menu-item-18024">
        <a href="http://dataunion.org/category/partners">
         合作伙伴
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20881" id="menu-item-20881">
        <a href="http://dataunion.org/contribute">
         文章投稿
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20872" id="menu-item-20872">
        <a href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f">
         加入数盟
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22441" id="menu-item-22441">
        <a href="http://dataunion.org/f-links">
         友情链接
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20874" id="menu-item-20874">
        <a href="http://dataunion.org/aboutus">
         关于数盟
        </a>
       </li>
      </ul>
      <p class="banquan">
       数盟社区        ，
        做最棒的数据科学社区
      </p>
     </div>
     <div class="left">
      <ul class="bottomlist">
       <li>
        <a href="http://weibo.com/DataScientistUnion  " target="_blank" 　title="">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weibo.png"/>
        </a>
       </li>
       <li>
        <a class="cd-popup-trigger" href="http://dataunion.org/19122.html#0">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weixin.png"/>
        </a>
       </li>
      </ul>
      <div class="cd-popup">
       <div class="cd-popup-container">
        <h1>
         扫描二维码,加微信公众号
        </h1>
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/2014-12-06-1515289049.png"/>
        <a class="cd-popup-close" href="http://dataunion.org/19122.html">
        </a>
       </div>
       <!-- cd-popup-container -->
      </div>
      <!-- cd-popup -->
     </div>
    </div>
    <!--about-->
    <div class="bottom">
     <a href="http://dataunion.org/">
      数盟社区
     </a>
     <a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank">
      京ICP备14026740号
     </a>
     联系我们：
     <a href="mailto:contact@dataunion.org" target="_blank">
      contact@dataunion.org
     </a>
     <div class="tongji">
     </div>
     <!--bottom-->
     <div class="scroll" id="scroll" style="display:none;">
      ︿
     </div>
    </div>
   </footer>
   <!--dibu-->
  </div>
 </body>
</html>